//
//  CJWPoprensionManger.swift
//  weibo
//
//  Created by 陈经纬 on 16/7/21.
//  Copyright © 2016年 陈经纬. All rights reserved.
//

import UIKit
private var ispresent = false
class CJWPoprensionManger: NSObject,UIViewControllerTransitioningDelegate,UIViewControllerAnimatedTransitioning{
    
    var presentFrame = CGRectZero
    
    //MARK:  代理方法UIViewControllerTransitioningDelegate
    // 该方法用于返回一个负责转场动画的对象
    // 可以在该对象中控制弹出视图的尺寸等
    func presentationControllerForPresentedViewController(presented: UIViewController, presentingViewController presenting: UIViewController, sourceViewController source: UIViewController) -> UIPresentationController?{
        
        let pc = popPresentationControl(presentedViewController: presented, presentingViewController: presenting)
        pc.presentFrame = presentFrame
        return pc
        
    }
    
    // 该方法用于返回一个负责转场如何出现的对象
    func animationControllerForPresentedController(presented: UIViewController, presentingController presenting: UIViewController, sourceController source: UIViewController) -> UIViewControllerAnimatedTransitioning?
    {
        ispresent = true
        return self
    }
    
    // 该方法用于返回一个负责转场如何消失的对象
    func animationControllerForDismissedController(dismissed: UIViewController) -> UIViewControllerAnimatedTransitioning?
    {
        ispresent = false
        return self
    }
    
    
    
/********************************************************/
    //MARK:  代理方法UIViewControllerAnimatedTransitioning
    // 告诉系统展现和消失的动画时长
    func transitionDuration(transitionContext: UIViewControllerContextTransitioning?) -> NSTimeInterval{
        return 0.2
    }
    
    func animateTransition(transitionContext: UIViewControllerContextTransitioning){
        
        if ispresent {//需要展现
            
            //设置标题按钮的图标发生改变(向上)---使用通知的方法
            NSNotificationCenter.defaultCenter().postNotificationName(CJWNoticationTitleImageUp, object: self)
            
            // 通过ToViewKey取出的就是toVC对应的view
            guard let toView = transitionContext.viewForKey(UITransitionContextToViewKey) else{
                return
            }
            // 2.将需要弹出的视图添加到containerView上
            transitionContext.containerView()?.addSubview(toView)
            
            //3,执行动画
            toView.transform = CGAffineTransformMakeScale(1.0, 0)
            
            // 设置锚点
            toView.layer.anchorPoint = CGPoint(x: 0.5, y: 0.0)
            UIView.animateWithDuration(transitionDuration(transitionContext), animations: {
                toView.transform = CGAffineTransformIdentity
                }, completion: { (true) in
                    transitionContext.completeTransition(true)
            })
            /*
             1.CGAffineTransformMakeTranslation(CGFloat tx, CGFloat ty)（平移:设置平移量）
             
             2.CGAffineTransformMakeScale(CGFloat sx, CGFloat sy)（缩放:设置缩放比例）仅通过设置缩放比例就可实现视图扑面而来和缩进频幕的效果。
             
             3.CGAffineTransformMakeRotation(CGFloat angle)（旋转:设置旋转角度）
             
             以上3个都是针对视图的原定最初位置的中心点为起始参照进行相应操作的，在操作结束之后可对设置量进行还原：
             
             view.transform＝CGAffineTransformIdentity;
             */
            
            
            
            
            
        }else{
            
            //设置标题按钮的图标发生改变(向下)---使用通知的方法
            NSNotificationCenter.defaultCenter().postNotificationName(CJWNoticationTitleImageDown, object: self)
            
            guard let fromView = transitionContext.viewForKey(UITransitionContextFromViewKey) else{
                return
            }
            
            // 2.执行动画让视图消失
            UIView.animateWithDuration(transitionDuration(transitionContext), animations: { () -> Void in
                // 突然消失的原因: CGFloat不准确, 导致无法执行动画, 遇到这样的问题只需要将CGFloat的值设置为一个很小的值即可
                fromView.transform = CGAffineTransformMakeScale(1.0, 0.00001)
                }, completion: { (_) -> Void in
                    // 注意: 自定转场动画, 在执行完动画之后一定要告诉系统动画执行完毕了
                    transitionContext.completeTransition(true)
            })
            
        }
        
    }



}
